Рекомендации по настройке hostname & fqdn
-----------------------------------------

Введение
~~~~~~~~~~~~~~~~~~~~~~~~~~

Компьютеры в домене используют fqdn имена, поэтому администраторам крайне важно понимать механизм их формирования. В операционных системах Linux для получения ответа на этот вопрос используется информация сразу из нескольких источников.

Рекомендации
~~~~~~~~~~~~~~~~~~~~~~~~~~

Утилита **hostname** без параметров возвращает локальное имя машины из файла виртуальной системы ядра ``/proc/sys/kernel/hostname``. Есть так же файл ``/etc/hostname``, который позволяет менять имя, но изменения вступают в силу только после перезагрузки. Можно поменять имя хоста без перезагрузки, используя утилиту ``hostnamectl set-hostname``

При использовании дистрибутивов Debian рекомендуют в качестве имени хоста устанавливать короткое имя, например, «pc-1», а не полное доменное имя fqdn, например, «pc-1.ald.company.local». В этом случае при вызове утилиты hostname без параметров будет отображаться значение «pc-1». Но можно в качестве имени хоста установить и полное имя fqdn, т. е. «pc-1.ald.company.local», тогда очевидно, что вызов hostname без параметров будет уже выдавать «pc-1.ald.company.local», а не «pc-1». Разница проявит себя в тех ситуациях, где используется имя хоста, например:

1) Утилита hostname с ключом -f в соответствии с настройками ``/etc/nsswitch.conf`` сначала ищет fqdn хоста по файлу ``/etc/hosts``, который содержит строки вида:

.. code-block:: bash

   IP-адрес каноническое_имя_узла [псевдонимы…]

Алгоритм берет локальное имя хоста и ищет в файле ``/etc/hosts`` строку с этим именем, если оно было найдено, возвращает каноническое имя из строки, как fqdn хоста.

Если в качестве hostname будет выступать fqdn, то поиск сработает, но не по псевдониму из строки, а по каноническому имени узла.

2) Если в файле ``hosts`` искомая запись не найдена, то в соответствии с настройками ``/etc/nsswitch.conf`` выполняется поиск хоста по DNS. Так как имя hostname, например, «pc-1», не содержит точек (см. параметр ndots), то к нему добавляется суффикс search из файла ``/etc/resolv.conf``, например, «ald.company.local» и получает полное имя fqdn «pc-1.ald.company.local», и запрашивает A- и AAAA-записи для этого fqdn у DNS сервера. Если DNS сервер вернет какую-нибудь запись, пусть даже с IP адресом, который не назначен ни одному из интерфейсов этого компьютера, то этот fqdn будет считаться валидным.

При вводе машины в домен инструментами ALD Pro именем хоста устанавливается fqdn. При вводе в домен ванильного Debian с помощью ванильного freeipa клиента поведение продукта в части hostname аналогичное — именем хоста устанавливается fqdn машины. Такой подход принят в Red Hat, и он наследуется при использовании FreeIPA, т. к. она сейчас разрабатывается как upstream Red Hat IdM.

При данном подходе вызов команды hostname без параметров будет выдавать fqdn хоста. Для серверов будет правильно указать в файле ``/etc/hosts`` строку, которая будет соответствовать этому fqdn, чтобы hostname -f работал без обращения к DNS, это и быстрее и надежнее.

На серверах предпочитаемая форма ``hosts`` выглядит следующим образом:

.. code-block:: bash

   127.0.0.1 localhost
   10.0.1.2 dc-1.ald.domain.local dc-1
   # 127.0.1.1 dc-1 - данную строку нужно закомментировать или удалить, т.к. адрес локальной петли будет иметь приоритет по отношению к любому другому локальному адресу

На клиентских машинах и серверах, где нет служб, настроенных на конкретный адрес локальной сети, можно разрешать доменное имя в IP адрес локальной петли.

.. code-block:: bash

   127.0.0.1 localhost
   127.0.1.1 pc-1.ald.domain.local pc-1

Если у вас в hosts есть две записи для имени сервера, то при разрешении имени сервера предпочтение отдается адресу 127.0.1.1, так как он имеет больший приоритет. Настройки приоритетов указаны в файле ``/etc/gai.conf``.

.. code-block:: bash

   127.0.0.1 localhost
   127.0.1.1 pc-1.ald.domain.local pc-1
   10.0.1.2  pc-1.ald.domain.local pc-1